#include "Celula.h"


Celula::Celula(Pessoa& p, Terreno& t, Mosquito& mos)
{
	this->p=&p;
	this->t=&t;
	this->mos=&mos;
}

Celula::Celula()
{

	this->p=nullptr;
	this->t=new Terreno();
	this->mos=nullptr;
}
Celula::Celula(const Celula & ob){

	if(ob.p==nullptr)
		this->p= nullptr;
	else
		if(ob.p->getType().compare("I")==0)
			this->p=new Idoso(*ob.p);
		else
			if(ob.p->getType().compare("J")==0)
				this->p=new Jovem(*ob.p);

	if(ob.t==nullptr)
		this->t= nullptr;
	else
		if(ob.t->getType().compare("N")==0)
			this->t=new Terreno();
		else
			if(ob.t->getType().compare("P")==0)
				this->t=new Pantano();
			else
				if(ob.t->getType().compare("H")==0)
					this->t=new Hospital();

	if(ob.mos==nullptr)
		this->mos=nullptr;
	else
		this->mos=new Mosquito(*ob.mos);

}
Celula & Celula::operator =(const Celula &ob){
	if(this!=&ob){
		delete this->p;
		delete this->mos;
		delete this->t;
		Terreno *auxt;
		Pessoa *auxp;
		if(ob.p==nullptr)
			this->p= nullptr;
		else{
			auxp=ob.p->getCopia();
			this->p=auxp->getCopia();
		}
			
		if(ob.t==nullptr)
			this->t= nullptr;
		else{//colocar um virtual getcopia no Terreno!
			auxt=ob.t;
			this->t=auxt->getCopia();
		}
		if(ob.mos==nullptr)
			this->mos=nullptr;
		else
			this->mos=new Mosquito(*ob.mos);
	}
	return *this;
}
Celula::~Celula(void)
{
	if(p!=nullptr){
		delete p;
		p=nullptr;
	}
	if(t!=nullptr){
		delete t;
		t=nullptr;
	}
	if(mos!=nullptr){
		delete mos;
		mos=nullptr;
	}
}


void Celula::setPessoa(Pessoa* pe){

	p= pe;
}
void Celula::setTerreno(Terreno* te){
	t=te;
}
//void Celula::copyPessoa(Pessoa* pe){
//
//	if(pe->getType().compare("I")==0){
//		Idoso* i= (Idoso *) pe;
//		this->p=new Idoso(*i);
//	}
//
//}
Pessoa* Celula::getPessoa(){

	return this->p;
}
Terreno* Celula::getTerreno(){
	return this->t;
}
void Celula::setMosquito(Mosquito* mosq){
	this->mos=mosq;
}
Mosquito* Celula::getMosquito(){
	return this->mos;
}